
import { createRouter , createWebHashHistory } from "vue-router";
// 导入封装axios文件
import $axios from "@/utils/request";
// 弹窗
import { ElMessage } from "element-plus";


// 1.后台账号可以访问前后台所有页面  2.前台账号只能访问前台页面  3.没有账号可访问部分前台页面

// 给路由设置两个属性：
// requireAuth属性：你目前所登录的账号是否有权限访问当前路由：true；当前账号有权限访问这些路由：false：当前账号没有权限访问这些路由
// isCheckLogin属性：主要针对前台网页，true ；这些路由必须登录账号才能访问；false：那些路由不登录也能访问

const routes = [
   {
    path : '/',
    redirect : '/home'  //当直接访问官网或本地域名时默认重定向到前台首页
   },
    //前台网站：进入默认访问首页
    {
        path:'/home',
        meta :{ requireAuth:false},  //前台商城所有页面皆可用任何账号访问
        // 子路由
        children : [
            //设置子路由首页组件的访问地址为空，相当于当访问/home的时候，也会默认访问到组件页面
            {path :'',name : 'HomeIndex' , component:()=>import('@/views/home/HomeIndex.vue'),meta:{title:'在线商城首页',isCheckLogin:false}},
            {path :'login',name : 'HomeLogin' , component:()=>import('@/views/home/HomeLogin.vue'),meta:{title:'会员登录',isCheckLogin:false}},
            {path :'classify',name : 'HomeClassify' , component:()=>import('@/views/home/HomeClassify.vue'),meta:{title:'分类',isCheckLogin:false}},
             {path :'fine',name : 'HomeFine' , component:()=>import('@/views/home/HomeFine.vue'),meta:{title:'发现',isCheckLogin:false}},
            {path :'cart',name : 'HomeCart' , component:()=>import('@/views/home/HomeCart.vue'),meta:{title:'会员购物车',isCheckLogin: true}}
        ]
    },
    // 后台管理系统:进入默认访问登录页
    {
        path:'/admin',
        children : [
            // 设置空路由给登录组件
            {path : '', name :'AdminLogin' , component:()=>import('@/views/admin/AdminLogin.vue'),meta:{title:"后台系统登录页",requireAuth:false}},
            {path : 'index', name :'AdminIndex' , component:()=>import('@/views/admin/AdminIndex.vue'),
               meta:{title:"后台系统首页" ,requireAuth:true},
            children:[
                {
                    // 用户管理的子路由
                    path: 'user',
                    children :[
                        {path: '', name:'AdminUserListCom', component:()=>import('@/components/admin/user/AdminUserListCom.vue'),
                            meta: {title:'后台系统用户管理', requireAuth:true}
                        }
                    ]
                }
            ]
            },
        ]
    },
    
];

const router = createRouter({
    routes,
    history : createWebHashHistory(),
})

// 设置全局前置路由守卫(能获取登录者的身份===>isCheckLogin:true/requireAuth:true； 没有获取到登录者的身份===>isCheckLogin：fasle)
router.beforeEach((to,from,next)=>{
    // 接收身份数据
    let role;
    // 判断即将前往的目录路由是否需要验证访问权限:如果需要验证则发起角色访问请求:如果不需要,只需要判断是否需要前台账号

    if (to.meta.requireAuth === true) {
        // 需要验证当前使用者的访问权限
        // 向后端发起请求当前使用者角色的数据
        $axios.post('/role').then((res)=>{                                                            
            // 判断状态码是否为200 ===> 请求成功
            if(res.code == '200'){
                // 获取到了使用者身份
                role = res.data;
                document.title = to.meta.title;

                // 判断当前身份是否是"admin后台管理员",如果是则说明自己登录后台账号且能访问后台首页
                switch(role){
                    case 'admin':
                        // 有足够的权限访问后台页面
                        next();
                     break;

                     case 'user':
                    // 权限不足
                    ElMessage.error('您的权限不足,请前往商城登录,祝您购物愉快!');
                    next('/home/login');
                     break;
                }
                
            }else{
                // 没有获取到身份
                ElMessage.error('您还不是我们的会员,请注册!');
                next('/home/login');  
            }
        }).catch((err)=>console.log(err))

    }else{
        // 不需要权限限制,只要个账号都能访问到商城
        // 只需要做一个判断，当前路由是否需要登录后才能访问
        if(to.meta.isCheckLogin === true){
            // 会员缓存提取数据
            let user= sessionStorage.getItem('user');
            // 没有数据
            if (!user) {
                // 强制前往前台登录页
                next('/home/login');
            }else{
                next();
            }
        }else{
            // 不需要登录，直接走人
            next();
        }
    }
})
export default router;
